import { ref } from 'vue';


export function useAddress(){

// 选中的地址（存储code数组，如：['110000', '110100', '110101']）
    const selectedAddress = ref([]);

// 级联选择器配置
    const cascaderProps = {
        lazy: true, // 启用懒加载
        lazyLoad: loadAddressData, // 懒加载回调函数
        value: 'name', // 绑定值的字段名code
        label: 'name', // 显示文本的字段名
        children: 'children' // 子节点的字段名
    };

    /**
     * 动态加载地址数据
     * @param {Object} node 当前节点信息（包含level层级、data当前节点数据等）
     * @param {Function} resolve 用于返回数据的回调函数
     */
    async function loadAddressData(node, resolve) {
        const { level, data } = node;
        let addressData = [];

        try {
            // 根据层级加载对应数据（实际项目中替换为真实接口调用）
            if (level === 0) {
                // 第一级：加载省份数据
                addressData = await getProvinces();

            } else if (level === 1) {
                // 第二级：根据省份code加载城市数据
                addressData = await getCities(data.code);
            } else if (level === 2) {
                // 第三级：根据城市code加载区县数据
                addressData = await getDistricts(data.code);
            }

            console.log("addressData",addressData);
            console.log("selectedAddress",selectedAddress);
            // 处理数据：标记是否为叶子节点（区县为最末级，无子集）
            const result = addressData.map(item => ({
                ...item,
                leaf: level >= 2 // 层级>=2时为叶子节点（无下一级）
            }));


            // 将处理后的数据返回给级联选择器
            resolve(result);
        } catch (error) {
            console.error('地址数据加载失败：', error);
            resolve([]); // 出错时返回空数组，避免组件报错
        }
    }

    /**
     * 模拟获取省份数据（实际项目中替换为后端接口）
     */
    function getProvinces() {
        return new Promise(resolve => {
            // 模拟接口延迟
            setTimeout(() => {
                resolve([
                    { code: '110000', name: '北京市' },
                    { code: '120000', name: '天津市' },
                    { code: '130000', name: '河北省' },
                    { code: '310000', name: '上海市' },
                    { code: '440000', name: '广东省' },
                    // 更多省份数据...
                ]);
            }, 200);
        });
    }

    /**
     * 模拟获取城市数据（实际项目中根据省份code调用后端接口）
     * @param {string} provinceCode 省份编码
     */
    function getCities(provinceCode) {
        return new Promise(resolve => {
            setTimeout(() => {
                let cities = [];
                switch (provinceCode) {
                    case '110000':
                        // 北京市下辖的"市"级数据（实际是直辖市直接到区，这里简化为一级）
                        cities = [{ code: '110100', name: '北京市' }];
                        break;
                    case '130000':
                        // 河北省的城市
                        cities = [
                            { code: '130100', name: '石家庄市' },
                            { code: '130200', name: '唐山市' },
                            { code: '130300', name: '秦皇岛市' },
                            { code: '130400', name: '邯郸市' }
                            // 更多城市...
                        ];
                        break;
                    case '440000':
                        // 广东省的城市
                        cities = [
                            { code: '440100', name: '广州市' },
                            { code: '440300', name: '深圳市' },
                            { code: '440600', name: '佛山市' }
                            // 更多城市...
                        ];
                        break;
                    // 其他省份的城市映射...
                }
                resolve(cities);
            }, 200);
        });
    }

    /**
     * 模拟获取区县数据（实际项目中根据城市code调用后端接口）
     * @param {string} cityCode 城市编码
     */
    function getDistricts(cityCode) {
        return new Promise(resolve => {
            setTimeout(() => {
                let districts = [];
                switch (cityCode) {
                    case '110100':
                        // 北京市的区县
                        districts = [
                            { code: '110101', name: '东城区' },
                            { code: '110102', name: '西城区' },
                            { code: '110105', name: '朝阳区' },
                            { code: '110106', name: '丰台区' }
                            // 更多区县...
                        ];
                        break;
                    case '440300':
                        // 深圳市的区县
                        districts = [
                            { code: '440303', name: '罗湖区' },
                            { code: '440304', name: '福田区' },
                            { code: '440305', name: '南山区' },
                            { code: '440306', name: '宝安区' }
                            // 更多区县...
                        ];
                        break;
                    // 其他城市的区县映射...
                }
                console.log(districts);
                resolve(districts);
            }, 200);
        });
    }
    return{
        selectedAddress,
        cascaderProps
    }
}